package uploaddemo.demo.server;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

/**
 * ClassName:UploadServer
 * Package:uploaddemo.demo.server
 * Description: 描述信息
 *
 * @date:2022/4/24 20:06
 * @author:动力节点
 */
@Service
public class UploadServer {

    /**
     * MultipartFile 他是springmvc提供的文件上传的接收的类
     * 他的底层会自动的和HTTPServerRequest request中的request.getInputStream
     * 从而达到文件上传的效果
     * 文件上传的底层原理是：request.getInputStream
     * @param multipart
     * @param dir
     * @return
     */
   @Value("${file.uploadFolder}")
   private String uploadFolder;
   @Value("${file.staticPath}")
   private String staticPath;
   @Value("${file.staticPattern}")
   private String staticPattern;
   public Map<String,Object> uploadAll(MultipartFile multipart, String dir){
       try {
           //2.截图文件的后缀
           String originalFilename = multipart.getOriginalFilename();//拿到获取的文件ppp.jsp
           String impSuffix = originalFilename.substring(originalFilename.lastIndexOf("."));//获取.jsp
           //3.生成唯一的文件名
           String newFilename=UUID.randomUUID().toString()+impSuffix;//生成唯一文件名例如asfasfasf
           //4.日期目录
           SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");//生成时间格式初始化
           String dataPath = dateFormat.format(new Date());//生成当前文件的当前时间
           //5.指定最终的文件路径(文件路径+时间目录)
           String savePath = uploadFolder;
           File targetPath = new File(savePath+dir,dataPath);//文件所在路径加时间目录
           if (!targetPath.exists()){ //判断是否有该路径
               targetPath.mkdirs();
           }
           //6.指定文件上传以后的服务器的完整文件名
           File targetFileName = new File(targetPath,newFilename);//指定文件上传以后的服务器的完整文件名D://upload/asfasfasf。jsp
           //7.文件上传到指定目录
           multipart.transferTo(targetFileName);
           //8.可访问路径要返回到页面
           String fileName = dir + "/" + dataPath + "/" + newFilename;
           HashMap<String, Object> map = new HashMap<String, Object>();
           map.put("url",staticPath+staticPattern+fileName);
           map.put("size",multipart.getSize());
           map.put("ext",impSuffix);
           map.put("fileName",originalFilename);
           map.put("rPath",dir +"/"+dataPath + "/" + newFilename);
           //ftp远程服务文件件存储
           return map;
       } catch (IOException e) {
           e.printStackTrace();
           return null;
       }

   }
}
